/**
 * @file src/core/markdown/formatters/link.js
 * @description 链接与图片处理器
 * 
 * 专门处理 Markdown 文本中的链接与图片，输出社交平台友好的 HTML。
 * 该模块从内联文本格式化中抽离，提升模块化与复用性。
 */

import { REGEX_PATTERNS } from '../../../config/constants/index.js';
import { cleanUrl as sharedCleanUrl, escapeHtml as sharedEscapeHtml } from '../../../shared/utils/text.js';

/**
 * 处理链接
 * 将 Markdown 格式的链接转换为 HTML 链接标签
 * 支持社交平台友好的样式
 *
 * @param {string} text - 包含链接标记的文本
 * @param {Object} theme - 主题对象
 * @returns {string} - 处理后的文本
 */
export function processLinks(text, theme) {
  return text.replace(REGEX_PATTERNS.LINK, (_, linkText, url) => {
    const sanitizedUrl = sharedCleanUrl(url);
    if (!sanitizedUrl) return linkText; // 无效/不安全的 URL：不生成链接
    return `<a href="${sanitizedUrl}" style="color: ${theme.primary}; text-decoration: none; border-bottom: 1px solid ${theme.primary}4D;" target="_blank" rel="noopener noreferrer">${linkText}</a>`;
  });
}

/**
 * 处理图片
 * 将 Markdown 格式的图片转换为 HTML 图片标签
 * 支持响应式设计和懒加载
 * 
 * @param {string} text - 包含图片标记的文本
 * @param {Object} theme - 主题对象
 * @returns {string} - 处理后的文本
 */
export function processImages(text, theme) {
  return text.replace(REGEX_PATTERNS.IMAGE, (_, altText, url) => {
    const sanitizedUrl = sharedCleanUrl(url);
    const hasAlt = typeof altText === 'string' && altText.trim().length > 0;
    const cleanAlt = hasAlt ? altText.trim() : '图片';

    const safeAlt = sanitizeAttribute(cleanAlt);
    const captionAttr = hasAlt ? ' data-md-caption="true"' : '';

    if (!sanitizedUrl) {
      const placeholderText = sharedEscapeHtml(cleanAlt || '图片');
      return `<span class="md-image-placeholder">${placeholderText}</span>`;
    }

    return `<img src="${sanitizedUrl}" alt="${safeAlt}"${captionAttr} style="max-width: 100%; height: auto; border-radius: 6px; box-shadow: 0 2px 8px ${theme.shadowColor}; margin: 8px 0; display: block;" loading="lazy">`;
  });
}

/**
 * 清理和验证 URL
 * 使用共享的 URL 清理工具
 * 
 * @param {string} url - 需要清理的 URL
 * @returns {string} - 清理后的 URL
 */
export function cleanUrl(url) {
  return sharedCleanUrl(url);
}

/**
 * 生成安全的 HTML 属性值
 * 转义HTML属性中的特殊字符，防止XSS攻击
 * 
 * @param {string} value - 属性值
 * @returns {string} - 安全的属性值
 */
export function sanitizeAttribute(value) {
  if (!value) return '';
  
  return value
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#39;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;');
} 